package api

import (
	"aigen-todo/internal/service"
	"strconv"

	"github.com/gofiber/fiber/v2"
)

// CreateTaskLogRequest defines the structure for creating a task log
type CreateTaskLogRequest struct {
	// Content of the task log
	// required: true
	// example: 今天完成了项目报告的初稿
	Content string `json:"content" binding:"required"`
}

// TaskLogItem defines the structure for a task log item
type TaskLogItem struct {
	LogID     uint64 `json:"log_id"`
	TaskID    uint64 `json:"task_id"`
	Content   string `json:"content"`
	CreatedAt string `json:"created_at"`
}

// CreateTaskLogHandler godoc
// @Summary      创建任务日志
// @Description  为指定任务创建日志记录
// @Tags         任务日志
// @Accept       json
// @Produce      json
// @Param        Authorization header string true "Bearer Token"
// @Param        task_id path int true "任务ID"
// @Param        createTaskLogReq body CreateTaskLogRequest true "创建任务日志请求"
// @Success      200  {object}  TaskLogResponse
// @Failure      400  {object}  TaskLogResponse
// @Failure      401  {object}  TaskLogResponse
// @Failure      500  {object}  TaskLogResponse
// @Router       /tasks/{task_id}/logs [post]
func CreateTaskLogHandler(taskLogService *service.TaskLogService) fiber.Handler {
	return func(c *fiber.Ctx) error {
		userID := c.Locals("user_id")
		if userID == nil {
			return Unauthorized(c) // 使用默认错误消息
		}

		// 获取任务ID
		taskID, err := strconv.ParseUint(c.Params("id"), 10, 64)
		if err != nil {
			return BadRequest(c) // 使用默认错误消息
		}

		var req CreateTaskLogRequest
		if err := c.BodyParser(&req); err != nil {
			return BadRequest(c) // 使用默认错误消息
		}

		// 创建任务日志
		log, err := taskLogService.CreateTaskLog(taskID, req.Content)
		if err != nil {
			return InternalServerError(c) // 使用默认错误消息
		}

		data := map[string]interface{}{
			"log_id":     log.ID,
			"task_id":    log.TaskID,
			"content":    log.Content,
			"created_at": log.CreatedAt,
		}
		return SuccessWithMessage(c, "添加成功", data)
	}
}

// GetTaskLogsHandler godoc
// @Summary      获取任务日志列表
// @Description  获取指定任务的所有日志记录
// @Tags         任务日志
// @Accept       json
// @Produce      json
// @Param        Authorization header string true "Bearer Token"
// @Param        task_id path int true "任务ID"
// @Success      200  {object}  TaskLogListResponse
// @Failure      400  {object}  TaskLogListResponse
// @Failure      401  {object}  TaskLogListResponse
// @Failure      500  {object}  TaskLogListResponse
// @Router       /tasks/{task_id}/logs [get]
func GetTaskLogsHandler(taskLogService *service.TaskLogService) fiber.Handler {
	return func(c *fiber.Ctx) error {
		userID := c.Locals("user_id")
		if userID == nil {
			return Unauthorized(c) // 使用默认错误消息
		}

		// 获取任务ID
		taskID, err := strconv.ParseUint(c.Params("id"), 10, 64)
		if err != nil {
			return BadRequest(c) // 使用默认错误消息
		}

		// 获取任务日志
		logs, err := taskLogService.GetTaskLogsByTaskID(taskID)
		if err != nil {
			return InternalServerError(c) // 使用默认错误消息
		}

		// 转换为响应格式
		logList := make([]map[string]interface{}, len(logs))
		for i, log := range logs {
			logList[i] = map[string]interface{}{
				"log_id":     log.ID,
				"task_id":    log.TaskID,
				"content":    log.Content,
				"created_at": log.CreatedAt,
			}
		}

		data := logList
		return SuccessWithMessage(c, "获取成功", data)
	}
}
